Microfiche Appendix 1, pages 1-43 is attached hereto and contains a sample computer readable code for implementing various aspects of this invention. One skilled in the art can practice these aspects by reviewing the computer readable code sample in Appendix 1. Appendix 1 is a part of the present disclosure and is fully incorporated by reference in its entirety.
1. Field of the Invention
This invention relates to the field of computer software and, more specifically, to a method and system for monitoring and recording user actions and events that occur during development and maintenance of source code and related data in a software application. In certain embodiments, system features facilitate the maintenance and development of software code by providing an efficient editing environment.
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The owner has no objection to the facsimile reproduction by any one of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyrights whatsoever.
Certain marks referenced herein may be common law or registered trademarks of third parties affiliated or unaffiliated with the applicant or the assignee. Use of these marks is for the purpose of providing an enabling disclosure by way of example and shall not be construed to limit the scope of this invention to material strictly associated with such marks.
2. Background Art
Until fairly recently, the general public was relatively unaware of the importance of and the problems associated with software maintenance. In the past years, the highly controversial millennium bug (also known as the Y2K bug) brought issues related to software maintenance to the center of the public""s attention. Due to time and economic limitations associated with the development of software, a software developer may not have the luxury or the foresight to predict all events and changes that may affect the performance of the software after its release. Thus, software applications need to be updated, maintained, and reconfigured continuously to meet newly developed technological advances and social needs.
In addition to the knowledge and background of the individual maintaining and developing a software application, maintenance of the software application is highly dependent on the quality of the application and also on the detailed documentation of the various portions of the code or other data that composes the software as a whole. While there are methods available to a software developer to describe the functionality of each code segment or reasons for modifying the code, typically, software developers do not exercise such degree of care because of the time constraints associated with the maintenance and development of software applications. Lack of diligence in adequately documenting computer readable code can lead to development of a complex software product, that includes thousands of lines of code, and that is difficult to maintain because of inadequate documentation. Unfortunately, some computer applications are incomprehensible even to the people who wrote them in the first place, not to mention the people who work on the application, years later over the life of the application.
To illustrate how difficult it is to understand and maintain a software application that does not include proper documentation, it is noteworthy to quote Mr. Alan Greenspan, the current Chairman of the Federal Board of Reserve and Federal Open Market Committee. During his testimony to the U.S. Joint Economic Committee in May 1998, about the Y2K problem, Mr. Greenspan stated xe2x80x9cI know how complex some of the problems are because I was one of those people who wrote some of the programs, which are creating the problems today. I know that I did not document them in the way in which even I, if I were to see the programs today, could figure out what was done.xe2x80x9d
Many software programs written as far back as thirty years ago are still being used and maintained by major businesses and corporations. Much time and money is and has been expended by many businesses to determine changes made to software applications over the years by various computer programmers. It would be beneficial to a programmer who maintains computer readable code to have the advantage of knowing, with certainty and detail, the changes that have been previously made to the code and reasons for such changes. Further, because, typically, a substantial amount of time is spent to review and modify computer readable code, it is desirable to record the time spent by different people on different parts of the code for billing and accounting purposes. Currently available systems are inadequate to accomplish the above objectives because they are overly manual, time intensive, and fail to provide a programmer with sufficiently detailed information. They further lack advanced commenting, reporting or time tracking features.
A method and apparatus is needed that can provide a software developer with the tools to track the development of a software application and to determine the changes and/or attempted changes to computer readable code in an efficient manner. Efficient commenting, time tracking, billing, and reporting features are also essential. This invention and its advantages and improvements over the prior art schemes will be better understood and appreciated after reviewing the following detailed description of the invention.
The invention is directed, in one or more embodiments, to a method and system for documenting and tracking user actions and events that occur during creation, development, and modification of computer readable code (also referred to as source code). Features of the system facilitate the development and maintenance of computer readable code. User actions and events, including editing modifications, are detected and recorded in detail in a controlled environment by monitoring user interaction with the source code. In addition, the nature and context of changes made to the source code are detected and recorded when the point of focus in the source code changes from one position to another. The point of focus is a controlled point in the source code that changes position as a result of user interaction with the system.
In certain embodiments, detected user actions and modifications in lines of code are recorded in a transaction log. A transaction log is, typically, an electronic file or other data structure made up of series of entries (i.e., records), where an entry includes information about a user action, event, or modification in the source code. A record in the transaction log may be implemented physically across multiple databases or data management structures. Source code for a computer system can be contained in one or more code modules. Typically, one or more records or entries in the transaction log correspond to at least one line in the code module that is modified. In some embodiments, other data structures (e.g., tables, arrays, etc.) are used to store, sort, or otherwise manage certain data entered by the user (e.g., search terms), or data already included in the source code (e.g., variable names, definitions, etc.).
In certain embodiments, the system monitors and records information relating to the identity of a user editing the code module, time and date the module was modified, amount of time spent by a user during modification, code module""s project identification, and the points of focus at the time of modification. In some embodiments, user comments, the module""s name, and its location of storage are recorded, as well.
Embodiments of the invention include certain reporting features. The reporting features are used to aggregate information recorded by the system and generate reports in print or on a display screen. These reporting features integrate with commercially available word processing and accounting software such as Microsoft Word(copyright), Acess(copyright), and Excel(copyright) to allow for fast and easy generation of customized and/or pre-formatted reports. Time and expense reports are processed and generated to notify and update a user about the progress and billing status for multiple projects, for example. The system is also designed to integrate with and use commercially available database and data management systems such as Microsoft Access(copyright), Microsoft Data Engine(copyright) (MSDE), and server systems that support Structured Query Language (SQL). The data management software named above are provided by way of example. The invention, in other embodiments, can be used in conjunction with any data management or data processing software.
Embodiments of the invention also include certain search and referencing features that instantly provide a user with information about variables defined in the source code. A variable is the name used to refer to a particular data structure. A variable is defined in the source code and is typically assigned a value. A variable definition can include information about the type, size, domain, inheritance, and class assigned to that variable. In certain embodiments, when a user selects, points to, or otherwise references a variable in the source code, information that define the variable is displayed in a pop-up window or other forms of graphical user interface. This allows the user to quickly discern the definition for a variable without having to change the point of focus in the source code to the point that includes the definition of the variable.
The system also includes features that allow a user to view dependencies among variables, such that the user can determine definition or type conflicts among dependent variables. Variables are dependent when change in the value of one results in change in the value of another. Thus, in accordance with one aspect of the invention, when a user selects, points to, or references a variable in the source code, the system displays a list of variables that are dependent on the chosen variable. In some embodiments, the system displays a list of variables upon which the chosen variable depends. The list can further include information about the definition and values assigned to the listed variables.
Modifications made to a line in the source code are detected and recorded in the transaction log as one or more entries. Therefore, a modified line in the source code, typically, corresponds to one or more entries in the transaction log. In some embodiments, the system is configured to allow a user to jump from one line in the source code to a related entry in the transaction log and vise versa. For example, if an entry in the transaction log is associated with a modification made in a certain line in the source code, then if the user selects that entry then the system displays the modified line. This allows the user to quickly refer back and forth between a line modified in the source code and the corresponding entries for that line in the transaction log.
Certain features of the invention allow compound search queries that include more than one search term and/or condition. Lines of code in the source code can be also marked electronically so that a user can go to a specific line in the code by referencing the mark from anywhere within the source code. According to one or more aspects of the invention, the content of the source code or the transaction log can be color-coded to enhance the visibility of specific terms or modifications in the code. The color-coding scheme can be based on the appearance of one or more terms in one or more lines, for example, or can be based on other search criteria and conditions as requested by the user.
One or more embodiments of the invention include commenting features that allow a user to more efficiently annotate the code with comments and certain index information (e.g., user id, project id, identifying text-strings, user comments, modification time and date, etc.). The annotations can be inserted in different levels, in association with one or more lines of code or selected blocks of code. At one level, the annotations are entered in a special section of the source code (e.g., a comment block) reserved for such purpose. At another level, annotations are included in, before, or after a line of code. At yet another level, the user can select a block of code to be encapsulated between comments and other selected information.